package sixth.Object类;
class Person2{
    private String name;
    private int age;
    public Person2(String name,int age){
        this.name=name;
        this.age=age;
    }
    //覆写equals()
    public boolean equals(Object obj){
        if(this==obj){
            return true;
        }
        if(!(obj instanceof Person2)){
            return false;
        }
        Person2 p = (Person2) obj;//将传进来的对象进行向下转型
        if(p.name.equals(this.name)&& p.age==this.age){//逐个属性进行比较 看是否相等
            return true;
        }else{
            return false;
        }
    }
    public String toString(){
        //覆写方法
        return "姓名："+this.name+";年龄："+this.age;
    }
}
public class 对象的比较操作 {
    public static void main(String[] args) {
        Person2 p1 = new Person2("力能", 77);
        Person2 p2 = new Person2("力能", 77);
        System.out.println("p1.equals(p2):"+(p1.equals(p2)?"是同一个人":"不是同一个人"));
        System.out.println("p1.equals(\"hello\"):"+(p1.equals("hello")?"是同一个人":"不是同一个人"));
    }
}
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=62548:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 sixth.Object类.对象的比较操作
p1.equals(p2):是同一个人
p1.equals("hello"):不是同一个人

Process finished with exit code 0
 */
/**
 * 在Person类中覆写了equals方法 首先判断传递进来的对象与当前对象的地址是否相等
 * 如果相等 则肯定是一个对象，因为在equals处传递的参数是Object类型 所以任何对象都可以接受，这样在对象进行向下转型之前就要判断，
 * 判断传进来的对象是否是Person对象的实例，如果不是直接返回false；如果是，则将各个属性依次进行判断
 *      在编写测试方法的时候，为了测试程序的合理性，传入了一个字符串类型的对象 ，
 *      从结果中可以清除的看见，因为字符串不是Person类型，所以直接返回false
 */